﻿using System;
using System.Reflection;
using System.Windows.Forms;

namespace QQTools.Core
{
    public static class ControlExtensions
    {
        /// <summary>
        /// 在控件需要更新时，调用控件的 Invoke 方法
        /// 如果在UI 线程中调用，则直接执行，否则调用控件的 Invoke 方法
        /// </summary>
        /// <param name="control"></param>
        /// <param name="action"></param>
        public static void InvokeIfRequired(this Control control, Action action)
        {
            if (control == null)
            {
                return;
            }
            if (control.InvokeRequired)
            {
                control.Invoke(action);
            }
            else
            {
                action();
            }
        }


        /// <summary>
        /// 双缓冲，解决闪烁问题
        /// </summary>
        public static void DoubleBufferedListView(this ListView dgv, bool flag)
        {
            Type dgvType = dgv.GetType();
            PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
            pi.SetValue(dgv, flag, null);
        }
    }
}
